#include<iostream>
using ll = long long;
const int p = 1e9 + 7;
using namespace std;
ll n, k;
ll qpow(ll x, ll y, ll p)
{
    ll sum = 1;
    while (y)
    {
        if (y & 1)
        sum = sum * x % p;
        y >>= 1;
        x = x * x % p;
    }

    return sum;
}
int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        cin >> n >> k;
        ll ret = (qpow(k + 1, n + 1, p) - k - 1) * qpow(k, p - 2, p);
        cout << (ret % p + p) % p << endl;
    }    
    return 0;
}


//之前出现前面提到的原因就是我们写了一个多重循环，外层的循环不能及时调用 accept ，所以本质上就是我们的代码结构不好
// 现在再 QT中就没有这样的我呢提，现在我们就可更加方便的实现这个结构

// 现在开始重新再看一遍 linux 现在我们就可以对整个计算机系统深入的理解了！
//  那现在还在等什么呢，现在开始！！
// 对技术卷积系统需要有很深的认识才行，还是需要对这些东西有一定的认知才行，pta的比赛还是很有价值的！